/**
 * 
 */
package br.com.ctm.guiamedico.bean;

import java.util.ArrayList;
import java.util.HashSet;

import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.DualListModel;

import br.com.ctm.guiamedico.dao.api.MedicoDao;
import br.com.ctm.guiamedico.model.Especialidade;
import br.com.ctm.guiamedico.model.Medico;
import br.com.ctm.guiamedico.negocio.api.EspecialidadeNegocio;
import br.com.ctm.guiamedico.negocio.api.MedicoNegocio;
import br.com.framework.apresentacao.bean.CRUDBean;
import br.com.framework.persistencia.sort.Order;

/**
 * @author Cleber
 *
 */
@Named
@ConversationScoped
public class MedicoBean extends CRUDBean<Medico, MedicoDao, MedicoNegocio>{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private DualListModel<Especialidade> especialidades;
	
	@Inject
	private EspecialidadeNegocio especialidadeNegocio; 

	/**
	 * @param entidadeClass
	 */
	public MedicoBean() {
		super(Medico.class);
	}

	@Inject
	protected void setNegocio(MedicoNegocio negocio) {
		super.setNegocio(negocio);
	}

	/**
	 * @return the especialidades
	 */
	public DualListModel<Especialidade> getEspecialidades() {
		return especialidades;
	}

	/**
	 * @param especialidades the especialidades to set
	 */
	public void setEspecialidades(DualListModel<Especialidade> especialidades) {
		this.especialidades = especialidades;
	}
	
	@Override
	protected void beforeOutcomeCreate() {
		especialidades = new DualListModel<Especialidade>();
		especialidades.setSource(especialidadeNegocio.findAll("nome", Order.ASCENDING, true));
		especialidades.setTarget(new ArrayList<Especialidade>());
	}
	
	@Override
	protected void beforeOutcomeEdit() {
		especialidades = new DualListModel<Especialidade>();
		especialidades.setSource(especialidadeNegocio.findAll("nome", Order.ASCENDING, true));
		especialidades.setTarget(new ArrayList<Especialidade>(getEntidade().getEspecialidades()));
		especialidades.getSource().removeAll(getEntidade().getEspecialidades());
		super.beforeOutcomeEdit();
	}
	
	@Override
	public String salvar() {
		if (getEntidade().getEspecialidades() == null) {
			getEntidade().setEspecialidades(new HashSet<Especialidade>());
		}
		getEntidade().getEspecialidades().addAll(getEspecialidades().getTarget());
		getEntidade().getEspecialidades().retainAll(getEspecialidades().getTarget());
		return super.salvar();
	}
	
}
